package com.zhiwei.version.git.service;

import com.zhiwei.version.git.entity.GitBranchInfo;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.GitAPIException;

import java.io.IOException;

/**
 * function Git仓库分支服务
 * author zhiwei.yang
 * time 2020-3-4-15:33
 */
public interface GitBranchService {

    /**
     * 获取当前分支
     * @param git
     * @return
     */
    String getCurrentBranch(Git git) throws IOException;

    /**
     * 获取分支名
     * @param git
     * @return
     */
    GitBranchInfo getBranchList(Git git) throws IOException, GitAPIException;

    /**
     * 远程分支同步更新
     * @param git 本地仓库
     * @param branch 分支名
     */
    boolean pullBranch(Git git, String branch) throws IOException, GitAPIException;

    /**
     * 切换分支 git checkout
     * @param git 本地仓库
     * @param branch 分支名
     */
    boolean checkoutBranch(Git git, String branch) throws IOException, GitAPIException;

    /**
     * 切换分支
     * @param git 本地仓库
     * @param branch 分支名
     * @param force  分支不存在是否强制创建(git chekout -b 分支名)
     * @throws IOException
     */
    boolean checkoutBranch(Git git, String branch, boolean force) throws IOException, GitAPIException;

    /**
     * 源分支合并到目标分支
     * @param git git客户端
     * @param targetBranch 目标分支
     * @param sourceBranch 源分支
     * @return
     */
    boolean mergeBranch(Git git, String targetBranch, String sourceBranch) throws GitAPIException, IOException;
}
